package src;

import java.util.ArrayList;
import java.util.Random;
import java.util.Arrays;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.SQLException;

public class Business {
    private Data basedados;
    private int nenc;
    private int nprof;
    private int nalunos;
    private ArrayList<String> disciplinas;
    private ArrayList<String> nomes;
    private ArrayList<String> apelidos;
    private Random rand;
    private int sizenomes;
    private int sizeapelidos;


    private void criaDisciplinas(){
        disciplinas = new ArrayList<String>();
        String aux[] = {"Matemática","Portugues A","Portugues B", "Filosofia","Psicologia","CTV","Química","Física","Geometria Descritiva","Educação Fisica","Música","História"};
        disciplinas.addAll(Arrays.asList(aux));
    }

    public Business(int numenc, int numprof, int numalunos) throws IOException {
        rand = new Random();
        basedados = new Data();
        this.nenc = numenc;
        this.nprof = numprof;
        this.nalunos= numalunos;
        nomes = new ArrayList<String>();
        apelidos = new ArrayList<String>();
        criaDisciplinas();
        this.nomes.addAll(Parser.nomes());
        this.apelidos.addAll(Parser.apelidos());
        this.sizeapelidos = apelidos.size();
        this.sizenomes = nomes.size();

    }

    public void mostranome(){
        System.out.println(nomes.get(rand.nextInt(sizenomes)));
    }

    public void populate() throws SQLException {
        ArrayList<Integer>disciplinasAluno = new ArrayList<Integer>();

        /* Preenche tabela Encarregado */
        for(int i=0;i<nenc;i++){
           String nome = nomes.get(rand.nextInt(sizenomes));
           String apelido = apelidos.get(rand.nextInt(sizeapelidos));
            int cod = basedados.getNextIdEncarregado();
           String query = "Insert Into Encarregado Values("+cod+",'"+nome+" "+ apelido+"')";
           //System.out.println(query);
           basedados.insereTabela(query);
        }

        /*Preenche tabela Disciplina*/
        for(int i=0;i<disciplinas.size();i++){
            String query = "Insert Into Disciplina Values("+(i+1)+",'"+disciplinas.get(i)+"')";
            //System.out.println(query);
            basedados.insereTabela(query);
        }

        /*Preenche tabela Professor*/

        for(int i=0;i<nprof;i++){
            String nome = nomes.get(rand.nextInt(sizenomes));
            String apelido = apelidos.get(rand.nextInt(sizeapelidos));
            int cod = basedados.getNextIdProf();
            int disc = rand.nextInt(disciplinas.size())+1;
            String query = "Insert Into Professor Values("+cod+","+disc+",'"+nome+" "+ apelido+"')";
            //System.out.println(query);
            basedados.insereTabela(query);

        }

        /*Preenche tabela Alunos ao mesmo tempo que preenche tabela notas*/
        for(int i=0;i<nalunos;i++){
            disciplinasAluno.clear();
            int numdisciplinas = basedados.getMaxIDDisc();
            String nome = nomes.get(rand.nextInt(sizenomes));
            String apelido = apelidos.get(rand.nextInt(sizeapelidos));
            int cod = basedados.getNextIdAluno();
            int idade = rand.nextInt(22-15)+15;
            int enca = rand.nextInt(basedados.getNextIdEncarregado());
            String query = "Insert into Aluno Values("+cod+",'"+nome+" "+apelido+"',"+idade+","+enca+")";
            System.out.println(query);
            basedados.insereTabela(query);
            int j= 0;
            int aux = rand.nextInt(8-1)+1;
            while(j<aux){
                int disciplina = rand.nextInt(numdisciplinas);
                if( !( disciplinasAluno.contains(disciplina) ) ){
                    int nota = rand.nextInt(20);
                    disciplinasAluno.add(disciplina);
                    query = "Insert into notas values("+cod+","+disciplina+","+nota+")";
                    j++;
                    System.out.println(query);
                    basedados.insereTabela(query);
                }
            }
        }
    }


    public void init() throws SQLException {
        basedados.criaTabelas();
    }

    public void delete() throws SQLException{
        basedados.eliminaTabelas();
    }
    
}
